package park.manage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashSet;
import java.util.TreeSet;

public class EnrollJFrame extends JFrame implements MouseListener {
    //用户信息的集合
    HashSet<User> set = new HashSet<>();
    //车辆信息的集合
    TreeSet<Car> carSet = new TreeSet<>();
    //管理人员信息的集合
    HashSet<Manager> managerSet = new HashSet<>();
    //用来添加空格
    StringBuilder stringBuilder1 = new StringBuilder();
    //创建字体颜色
    //黑色
    Color fontColorBlack = new Color(0,0,0);
    //红色
    Color fontColorRed = new Color(207, 72, 72);
    //创建一个颜色对象实现透明效果
    Color tipColor = new Color(0,0,0,100);
    //创建一个字体样式对象
    Font font = new Font("微软雅黑", Font.PLAIN, 14);

    JButton register = new JButton(new ImageIcon("src\\image2\\login\\注册按钮.png"));
    JButton goBack = new JButton(new ImageIcon("src\\image2\\login\\返回按钮.png"));
    //创建文本输入框，JTextField是可见输入框，JPasswordField是不可见输入框
    JTextField userName = new JTextField();
    JPasswordField password = new JPasswordField();
    JTextField managerPassword = new JTextField();
    public EnrollJFrame(HashSet<User> set,TreeSet<Car> carSet,HashSet<Manager> managerSet) throws IOException{
        stringBuilder1 = addspace(stringBuilder1,20);
        //将形参的数据传入到本类中使用
        this.set = set;
        this.carSet = carSet;
        this.managerSet = managerSet;
        initJFrame();
        //初始化登录按钮的图片，刚开始是亮色的
        initLogin();
        //添加内容
        initView();
        //设置界面的可见性
        this.setVisible(true);
    }
    //初始化刚开始登录按钮是亮色的
    public void initLogin(){
        register.setIcon(new ImageIcon("src\\image2\\login\\注册按钮.png"));
    }
    //添加注册页面里面包含的内容
    public void initView(){
        //清空页面
        this.getContentPane().removeAll();
        //添加用户名和密码的格式提示
        JLabel userStyleTip = new JLabel("2到8个字符且不能以数字开头");
        JLabel passwordStyleTip = new JLabel("只能包含数字，字母，‘.’和下划线且是3到15个");
        //设置提示的字体
        userStyleTip.setFont(font);
        passwordStyleTip.setFont(font);
        //设置字体透明度
        userStyleTip.setForeground(tipColor);
        passwordStyleTip.setForeground(tipColor);
        userStyleTip.setBounds(175,170,300,20);
        passwordStyleTip.setBounds(95,230,500,20);
        this.getContentPane().add(userStyleTip);
        this.getContentPane().add(passwordStyleTip);
        //添加用户名文字
        JLabel userNameText = new JLabel(new ImageIcon("src\\image2\\login\\用户名.png"));
        userNameText.setBounds(86,135,47,17);
        this.getContentPane().add(userNameText);
        //添加用户名输入框
        userName.setBounds(165,134,200,30);
        this.getContentPane().add(userName);
        //添加密钥文字
        JLabel passwordText = new JLabel(new ImageIcon("src\\image2\\login\\密码.png"));
        passwordText.setBounds(100,195,32,16);
        this.getContentPane().add(passwordText);
        //添加密码输入框
        password.setBounds(165,195,200,30);
        this.getContentPane().add(password);
        //添加管理员注册码文字
        JLabel managerPasswordText = new JLabel(new ImageIcon("src\\image2\\login\\manager_password.png"));
        managerPasswordText.setBounds(72,255,95,17);
        this.getContentPane().add(managerPasswordText);
        //添加管理员注册码输入框
        managerPassword.setBounds(165,250,200,30);
        this.getContentPane().add(managerPassword);
        //添加注册按钮
        register.setBounds(246,300,128,47);
        goBack.setBounds(100,285,128,70);
        //去除按钮默认边框
        register.setBorderPainted(false);
        goBack.setBorderPainted(false);
        //添加事件
        register.addMouseListener(this);
        goBack.addMouseListener(this);
        //去除按钮背景
        register.setContentAreaFilled(false);
        goBack.setContentAreaFilled(false);
        this.getContentPane().add(register);
        this.getContentPane().add(goBack);
        //添加背景图片
        JLabel  background = new JLabel(new ImageIcon("src\\image2\\background.png"));
        background.setBounds(0,0,470,390);
        this.getContentPane().add(background);
        this.getContentPane().repaint();
    }
    //初始化窗口
    private void initJFrame() {
        //设置界面大小
        this.setSize(488,430);
        //设置界面的标题
        this.setTitle("身份验证");
        //设置置顶
        this.setAlwaysOnTop(true);
        //设置界面居中显示
        this.setLocationRelativeTo(null);
        //设置游戏的关闭模式，关闭游戏的时候同时关闭虚拟机
        this.setDefaultCloseOperation(3);
    }
    //添加空格的方法
    public StringBuilder addspace(StringBuilder stringBuilder,int sum){
        for(int i=0;i<sum;i++){
            stringBuilder.append("&nbsp;");
        }
        return stringBuilder;
    }
    //判断是否包含有用户输入的用户名信息
    public boolean containsName(String str){
        for(User user:set){
            if(user.getName().equals(str)){
                return true;
            }
        }
        return false;
    }
    //判断是否包含有用户输入的用户名信息
    public boolean containsName(String str,HashSet<Manager> set){
        for(Manager manager:set){
            if(manager.getName().equals(str)){
                return true;
            }
        }
        return false;
    }
    //重写了MouseListener接口的抽象方法，实现具体的鼠标操作事件
    @Override
    public void mouseClicked(MouseEvent e) {

    }
    @Override
    public void mousePressed(MouseEvent e) {
        Object object = e.getSource();
        if(object == register){
            System.out.println("按下了注册按钮");
            //seticon方法里面包含有repait方法，会自动刷新页面
            register.setIcon(new ImageIcon("src\\image2\\login\\注册按下.png"));
        }
    }
    @Override
    public void mouseReleased(MouseEvent e)  {
        Object object = e.getSource();
        if(object==register){
            System.out.println("释放了注册按钮");
            register.setIcon(new ImageIcon("src\\image2\\login\\注册按钮.png"));
            if(containsName(userName.getText())||containsName(userName.getText(),managerSet)) {
                System.out.println("注册失败,此用户名已存在");
                new MyJDialog("<html>"+stringBuilder1+"注册失败,此用户名已存在"+"</html>",344,344,true,true,"警告",fontColorRed);
                //清空用户名和密码输入框
                userName.setText("");
                password.setText("");
                managerPassword.setText("");
            }else{
                    //检查用户名输入的格式
                String name = userName.getText();
                if (!name.matches("[^\\d].{1,8}")){
                    System.out.println("用户名格式错误");
                    //弹框提醒
                    new MyJDialog("<html>"+stringBuilder1+"注册失败,用户名格式错误"+"</html>",344,344,true,true,"警告",fontColorRed);
                    //用户名格式错误的话弹框提醒并且清空用户名和密码输入框
                    userName.setText("");
                    password.setText("");
                }
                else if((!managerPassword.getText().equals("666666"))&&(!managerPassword.getText().equals("111111"))){
                    System.out.println("管理员注册码错误");
                    //弹框提醒
                    new MyJDialog("<html>"+stringBuilder1+"注册失败,管理员注册码错误"+"</html>",344,344,true,true,"警告",fontColorRed);
                    //管理员注册码错误的话弹框提醒并且清空密码输入框
                    managerPassword.setText("");
                }
                //密码的格式
                else if(!new String(password.getPassword()).matches("(\\w|.){3,15}")){
                    System.out.println("密码格式错误");
                    //弹框提醒
                    new MyJDialog("<html>"+stringBuilder1+"注册失败,密码格式错误"+"</html>",344,344,true,true,"警告",fontColorRed);
                    //密码格式错误的话弹框提醒并且清空密码输入框
                    password.setText("");
                }
                //都正确的话就添加到用户集合中
                else {
                    if(password.getText().equals("666666")){
                        set.add(new User(userName.getText(), password.getText()));
                        //将集合重新写入到文本文件中
                        try {
                            WriteFile.writeFile(set);
                        } catch (IOException ex) {
                            throw new RuntimeException(ex);
                        }
                        System.out.println("值班人员注册成功");
                        new MyJDialog("<html>"+stringBuilder1+"值班人员注册成功"+"</html>",344,344,true,true,"警告",fontColorBlack);
                        try {
                            this.setVisible(false);
                            new LoginJFrame(set,carSet,managerSet);
                        } catch (FileNotFoundException ex) {
                            throw new RuntimeException(ex);
                        }
                    }else{
                        managerSet.add(new Manager(userName.getText(), password.getText()));
                        //将集合重新写入到文本文件中
                        try {
                            WriteFile.writeFile(managerSet,"src/park/manage/manager.txt");
                        } catch (IOException ex) {
                            throw new RuntimeException(ex);
                        }
                        System.out.println("管理员注册成功");
                        new MyJDialog("<html>"+stringBuilder1+"管理员注册成功"+"</html>",344,344,true,true,"警告",fontColorBlack);
                        try {
                            this.setVisible(false);
                            new LoginJFrame(set,carSet,managerSet);
                        } catch (FileNotFoundException ex) {
                            throw new RuntimeException(ex);
                        }
                    }
                }
            }
        }else if(object == goBack){
            this.setVisible(false);
            try {
                new LoginJFrame(set,carSet,managerSet);
            } catch (FileNotFoundException ex) {
                throw new RuntimeException(ex);
            }
        }
    }
    @Override
    public void mouseEntered(MouseEvent e) {

    }
    @Override
    public void mouseExited(MouseEvent e) {

    }
}